﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Eco.Services;
using Eco.ObjectImplementation;

namespace CommonClasses.Utility
{
    /// <summary>
    /// Форма, запрашивающая у пользователя выбор одного элемента из представленного списка
    /// </summary>
    /// <typeparam name="T">Тип элементов списка</typeparam>
    public partial class ChooseOneForm<T> : Form        
    {
        static T result;
        static IList<T> sourceItems;

        private ChooseOneForm()
        {
            InitializeComponent();
        }  

        /// <summary>
        /// Осуществить запрос к пользователю
        /// </summary>
        /// <param name="caption">Заголовок окна запроса</param>
        /// <param name="source">Список элементов, из которых можно выбирать</param>
        /// <returns>Выбранный элемент</returns>
        public static T Choose(string caption, IList<T> source)
        {
            sourceItems = source;
            var form = new ChooseOneForm<T>();
            form.Text = caption;
            foreach (var item in source)
                form.ListBox.Items.Add(item);
            form.ShowDialog();
            return result;
        }

        private void ListBox_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (ListBox.SelectedIndex != -1)
                result = sourceItems[ListBox.SelectedIndex];
        }

        private void ListBox_DoubleClick(object sender, EventArgs e)
        {
            result = sourceItems[ListBox.SelectedIndex];
            this.Close();
        }

        private void OkButton_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void CancelButton_Click(object sender, EventArgs e)
        {
            result = default(T);
            this.Close();
        }
    }
}
